package com.leo;

import com.almasb.fxgl.app.GameApplication;
import com.almasb.fxgl.app.GameSettings;
import com.almasb.fxgl.dsl.FXGL;
import com.almasb.fxgl.time.LocalTimer;
import javafx.util.Duration;

import java.util.Map;

/**
 * @Author: wangss
 * @CreateTime: 2023-05-31  12:24
 * @Description: GameApplication类介绍
 */
public class FxglApp extends GameApplication {

    public FxglApp() {
        System.out.println("构造器---" + Thread.currentThread().getName());
    }

    /**
     * 初始化游戏的设置，比如 宽高、版本、图标、菜单 等
     *
     * @param settings
     */
    @Override
    protected void initSettings(GameSettings settings) {
        settings.setMainMenuEnabled(true);
        System.out.println("initSettings---" + Thread.currentThread().getName());
    }

    /**
     * 设置输入：键盘、鼠标
     */
    @Override
    protected void initInput() {
        System.out.println("initInput---" + Thread.currentThread().getName());
    }

    /**
     * 游戏的预处理
     */
    @Override
    protected void onPreInit() {
        System.out.println("onPreInit---" + Thread.currentThread().getName());
    }

    /* --------------------------------下边的方法在每次重新开始游戏的时候都会进行加载-------------------------------- */

    /**
     * 设置游戏的变量，方便在其他类进行访问
     *
     * @param vars map containing CVars (global variables)
     */
    @Override
    protected void initGameVars(Map<String, Object> vars) {
        System.out.println("initGameVars---" + Thread.currentThread().getName());
    }

    /**
     * 初始化游戏，比如设置一些音量
     */
    @Override
    protected void initGame() {
        System.out.println("initGame---" + Thread.currentThread().getName());
    }

    /**
     * 初始化物理设置，比如碰撞检测等
     */
    @Override
    protected void initPhysics() {
        System.out.println("initPhysics---" + Thread.currentThread().getName());
    }

    /**
     * 初始化界面组件
     */
    @Override
    protected void initUI() {
        System.out.println("initUI---" + Thread.currentThread().getName());

        printTimer = FXGL.newLocalTimer();
    }

    private LocalTimer printTimer;

    /**
     * 游戏开始后每一帧都会调用该方法
     *
     * @param tpf time per frame
     */
    @Override
    protected void onUpdate(double tpf) {
        if (printTimer.elapsed(Duration.seconds(1))) {
            System.out.println("onUpdate---" + Thread.currentThread().getName());
            printTimer.capture();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}
